from mitmproxy import http


class MitmMapLocal:

    # mitmdump实现maplocal
    # 和charles的maplocal原理是一样的：代理收到符合条件的request后，不是将客户端的request转发给真正的服务端，而直接伪造response发送给客户端
    # 当发现某个请求的地址（map from）符合某个条件时，就将响应信息（map to）替换为目标json文件
    def request(self,flow:http.HTTPFlow):
        # 如果 quote.json 在url中
        if "quote.json" in flow.request.pretty_url:
            # 打开本地文件 hogwarts.json，创造响应体，发送给客户端
            with open("hogwarts.json",encoding="utf-8") as f:
                #创造 响应体，注意 如果使用的mitm不是7版本的，此处是http.HTTPResponse
                #make有三个参数（status_code响应状态码,content响应体，headers响应头）
                flow.response = http.Response.make(
                    200,
                    f.read(),
                    {"Content-Type": "application/json"}
                )
#将实例放入插件列表中
addons = [
    MitmMapLocal()
]